const express = require('express')
const crypto = require('crypto')
const axios = require('axios')
const randomstring = require('randomstring')

const router = express.Router()

// 写一个接口，微信服务器会请求这个接口
router.get('/auth',(req,res) => {
    // 1.获取微信传过来的参数
    const {signature,echostr,timestamp,nonce} = req.query

    // 2.定义一个token，取值与微信公众平台中的token一样
    const token = 'weixin'

    // 3.将token、timestamp、nonce按字典序排序，排完之后拼接成一段紧紧相连的字符串
    const newStr = [token,timestamp,nonce].sort().join('')

    // 4.对拼接后的字符串进行sha1加密，得到一个新的签名
    const newSignature = crypto.createHash('sha1').update(newStr).digest('hex')
    
    // 5.对比signature与newSignature，如果相同，说明此次请求确实来自微信服务男友，就将echostr返回给微信
    if(signature == newSignature){
        res.send(echostr)
    }else{
        res.send('你是谁')
    }
})

// 写一个接口，给前端返回JSSDK的4个配置参数
router.get('/jssdk',(req,res) => {
    // 1.从微信公众平台中获取应用的appid和appsecret
    const appid = 'wx299a2cd4548ff435',appsecret = 'c3be0bec863493eb87e0c3f5978ead72'

    async function reqWX(){
        // 2.请求微信服务器，获取access_token
        const {access_token} = await axios.get(`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${appsecret}`).then((res) => res.data)

        // 3.拿上一步获取到的access_token，请求微信服务器，获取jsapi_ticket
        const {ticket} = await axios.get(`https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=${access_token}&type=jsapi`).then((res) => res.data)

        // 4.生成一个16位的随机字符串
        const noncestr = randomstring.generate(16)

        // 5.生成一个时间戳，单位为秒
        const timestamp = parseInt(new Date().getTime()/1000)

        // 6.获取当前网页的URL，不含#后面的内容
        const url = 'http://xiaobulaoshi.vipgz1.idcfengye.com/htmls/wx.html'

        // 7.按照字典序的方式拼接起来
        const string1 = `jsapi_ticket=${ticket}&noncestr=${noncestr}&timestamp=${timestamp}&url=${url}`

        // 8.对拼接结果进行sha1签名
        const signature = crypto.createHash('sha1').update(string1).digest('hex')
        
        // 9.将appId、timestamp、nonceStr、signature返回给调用JSSDK的前端页面
        res.send({
            appId: appid,
            timestamp,
            nonceStr: noncestr,
            signature
        })        
    }  

    reqWX()
})

module.exports = router